import { fileURLToPath, URL } from 'node:url'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default ({ mode }) => {
  return defineConfig({
    base: "/",
    plugins: [
      vue(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
        // 自动引入vue的ref、toRefs、onmounted等，无需在页面中再次引入
        imports: ['vue', 'vue-router'],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
      }
    },
    css: {
      preprocessorOptions: {
        // 全局样式引入
        scss: {
          additionalData: `
            @use "@/assets/styles/_mixins.scss" as *;
          `,
          javascriptEnabled: true
        }
      },
    },
    server: {
      host: '0.0.0.0',
      port: 9999, // 端口
      open: true, // 打开默认浏览器
      proxy: {
        "/api": {
          target: loadEnv(mode, process.cwd()).VITE_BASE_URL, // 本地 import.meta.env.VITE_BASE_URL
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ''),
          bypass(req, res, options) {
            /**
             * 此处配置可以在请求中看到真实的请求地址（X-Res-Proxyurl）
             * URL (url,base)
             * 是一个表示绝对或相对URL的DOM5 tring。
              如果url是相对URL,则会将base用作基准URL。
              如果ur1是绝对URL,则无论参数base是否存在，都将被忽略。
            */
            const proxyUrl = new URL(options.rewrite(req.url) || '', (options.target) as string)?.href || '';
            res.setHeader("x-res-proxyUrl", proxyUrl);
          },
        },
        /* /agent 本项目代理请求地址 */
        "/agent": {
          target: 'http://api.gz.010test.top/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/agent/, ''),
          bypass(req, res, options) {
            /**
             * 此处配置可以在请求中看到真实的请求地址（X-Res-Proxyurl）
             * URL (url,base)
             * 是一个表示绝对或相对URL的DOM5 tring。
              如果url是相对URL,则会将base用作基准URL。
              如果ur1是绝对URL,则无论参数base是否存在，都将被忽略。
            */
            const proxyUrl = new URL(options.rewrite(req.url) || '', (options.target) as string)?.href || '';
            res.setHeader("x-res-proxyUrl", proxyUrl);
          },
        },
      }
    },
  })
}